package com.emerquim.bean.model;

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import com.emerquim.bean.dao.DatosGeneralesEventoDAO;

/**
 * Clase para manejar los tratamientos que se le hacen a un paciente
 * @author Felipe Criales
 */
public class Tratamiento {

	// --------------------------------------
	// Atributos
	// --------------------------------------
	
	/**
	 * Modela la sintomatologia inicial del paciente
	 */
	private String sintomatologiaInicial;
	
	/**
	 * Modela el tipo de exposicion que tuvo el paciente
	 */
	private String tipoExposicion;
	
	/**
	 * Modela el tipo de clasificacion inicial del evento
	 */
	private String clasificacionInicialEvento;
		
	/**
	 * Modela si el paciente requiere remision
	 */
	private boolean requiereRemision;
	
	/**
	 * Modela el tipo de tratamiento que requiere el paciente
	 */
	private int tipoTratamiento;
	
	/**
	 * Modela la etapa del tratamiento
	 */
	private String etapaTratamiento;
	
	/**
	 * Modela el resultado
	 */
	private String resultado;
	
	/**
	 * Modela la fecha del informe del tratamiento
	 */
	private Date fecha;
	
	/**
	 * Modela el numero del tratamiento en la tabla
	 */
	private int numero;
	
	/**
	 * Modela la descripcion del tratamiento
	 */
	private String descripcion;
	
	/**
	 * Tipo tratamiento descripcion
	 */
	private String tipoTratamientoDescripcion;
	
	/**
	 * Atributo que guardar los nombres de los tipos de tratamientos
	 */
	private Map<Integer, String> nombresTipoTratamiento;

	/**
	 * Contructor de la clase con parametros
	 * @param sintomatologiaInicial
	 * @param tipoExposicion
	 * @param clasificacionInicialEvento
	 * @param informacion
	 * @param requiereRemision
	 * @param tipoTratamiento
	 * @param etapaTratamiento
	 * @param resultado
	 * @param fecha
	 * @param descripcion
	 */
	public Tratamiento(String sintomatologiaInicial, String tipoExposicion,
			String clasificacionInicialEvento,	boolean requiereRemision, int tipoTratamiento,
			String etapaTratamiento, String resultado, Date fecha, String descripcion) {
		this.sintomatologiaInicial = sintomatologiaInicial;
		this.tipoExposicion = tipoExposicion;
		this.clasificacionInicialEvento = clasificacionInicialEvento;
		this.requiereRemision = requiereRemision;
		this.tipoTratamiento = tipoTratamiento;
		this.etapaTratamiento = etapaTratamiento;
		this.resultado = resultado;
		this.fecha = fecha;
		this.descripcion = descripcion;
		
		DatosGeneralesEventoDAO datosGeneralesDao = new DatosGeneralesEventoDAO();
		this.nombresTipoTratamiento = datosGeneralesDao.getNombresTiposTratamientos();
		this.tipoTratamientoDescripcion = nombresTipoTratamiento.get(this.tipoTratamiento);
	}

	/**
	 * Contructor de la clase sin parametros
	 */
	public Tratamiento() {
		inicializarDatos();
		DatosGeneralesEventoDAO datosGeneralesDao = new DatosGeneralesEventoDAO();
		this.nombresTipoTratamiento = datosGeneralesDao.getNombresTiposTratamientos();
	}
	
	/**
	 * Metodo para inicializar los datos en blanco del tratamiento
	 * @author Felipe Criales
	 */
	public void inicializarDatos(){
		this.sintomatologiaInicial = "";
		this.tipoExposicion = "";
		this.clasificacionInicialEvento = "";
		this.requiereRemision = false;
		this.tipoTratamiento = 1;
		this.etapaTratamiento = "";
		this.resultado = "";
		this.fecha = new Date();
		this.numero = 0;
		this.descripcion = "";
		this.tipoTratamientoDescripcion = "";
	}

	/**
	 * @return the sintomatologiaInicial
	 */
	public String getSintomatologiaInicial() {
		return sintomatologiaInicial;
	}

	/**
	 * @param sintomatologiaInicial the sintomatologiaInicial to set
	 */
	public void setSintomatologiaInicial(String sintomatologiaInicial) {
		this.sintomatologiaInicial = sintomatologiaInicial;
	}

	/**
	 * @return the tipoExposicion
	 */
	public String getTipoExposicion() {
		return tipoExposicion;
	}

	/**
	 * @param tipoExposicion the tipoExposicion to set
	 */
	public void setTipoExposicion(String tipoExposicion) {
		this.tipoExposicion = tipoExposicion;
	}

	/**
	 * @return the clasificacionInicialEvento
	 */
	public String getClasificacionInicialEvento() {
		return clasificacionInicialEvento;
	}

	/**
	 * @param clasificacionInicialEvento the clasificacionInicialEvento to set
	 */
	public void setClasificacionInicialEvento(String clasificacionInicialEvento) {
		this.clasificacionInicialEvento = clasificacionInicialEvento;
	}

	/**
	 * @return the requiereRemision
	 */
	public boolean isRequiereRemision() {
		return requiereRemision;
	}

	/**
	 * @param requiereRemision the requiereRemision to set
	 */
	public void setRequiereRemision(boolean requiereRemision) {
		this.requiereRemision = requiereRemision;
	}

	/**
	 * @return the tipoTratamiento
	 */
	public int getTipoTratamiento() {
		return tipoTratamiento;
	}

	/**
	 * @param tipoTratamiento the tipoTratamiento to set
	 */
	public void setTipoTratamiento(int tipoTratamiento) {
		this.tipoTratamiento = tipoTratamiento;
		this.tipoTratamientoDescripcion = nombresTipoTratamiento.get(this.tipoTratamiento);
	}

	/**
	 * @return the etapaTratamiento
	 */
	public String getEtapaTratamiento() {
		return etapaTratamiento;
	}

	/**
	 * @param etapaTratamiento the etapaTratamiento to set
	 */
	public void setEtapaTratamiento(String etapaTratamiento) {
		this.etapaTratamiento = etapaTratamiento;
	}

	/**
	 * @return the resultado
	 */
	public String getResultado() {
		return resultado;
	}

	/**
	 * @param resultado the resultado to set
	 */
	public void setResultado(String resultado) {
		this.resultado = resultado;
	}

	/**
	 * @return the fecha
	 */
	public Date getFecha() {
		return fecha;
	}

	/**
	 * @param fecha the fecha to set
	 */
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	
	/**
	 * @return the numero
	 */
	public int getNumero() {
		return numero;
	}

	/**
	 * @param numero the numero to set
	 */
	public void setNumero(int numero) {
		this.numero = numero;
	}

	/**
	 * Retorna la fecha formateada
	 * @return
	 */
	public String getFechaString(){
		Format formater = new SimpleDateFormat("dd MMMM yyyy hh:mm aaa");
		return formater.format(this.fecha);
	}

	/**
	 * @return the descripcion
	 */
	public String getDescripcion() {
		return descripcion;
	}

	/**
	 * @param descripcion the descripcion to set
	 */
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	/**
	 * @return the tipoTratamientoDescripcion
	 */
	public String getTipoTratamientoDescripcion() {
		return tipoTratamientoDescripcion;
	}

	/**
	 * @param tipoTratamientoDescripcion the tipoTratamientoDescripcion to set
	 */
	public void setTipoTratamientoDescripcion(String tipoTratamientoDescripcion) {
		this.tipoTratamientoDescripcion = tipoTratamientoDescripcion;
	}
}
